package tool

import java.io.File

/**
 * Created by yz on 6/5/2021
 */
object Pojo {

  case class LongData(samples: Option[Seq[String]], samplesMethod: String, geneType: String, tissue: Option[String],
                      dfMin: Option[Double],
                      dfMax: Option[Double], diffSamples: Option[Seq[String]], diffSamplesMethod: String, order: String,
                      sort: Option[String])

  case class CircRnaData(chr: String, circBase: String, geneSymbol: String, samples: Option[Seq[String]],
                         samplesMethod: String, start: Option[Int],
                         end: Option[Int],
                         dfMin: Option[Double], dfMax: Option[Double],
                         diffSamples: Option[Seq[String]], diffSamplesMethod: String, geneName: Option[String],
                         order: String, sort: Option[String])

  case class PathwayData(sources: Option[Seq[String]], diffSamples: Option[Seq[String]], diffSamplesMethod: String,
                         order: String, sort: Option[String])

  case class CellData(cellOrigins: Option[Seq[String]], cellTypes: Option[Seq[String]],
                      diffSamples: Option[Seq[String]], diffSamplesMethod: String)

  case class GeneSymbolData(geneSymbol: String)

  case class CommandData(workspace: File, commands: List[String])

  object CommandData {

    def apply(workspace: File, command: String) = new CommandData(workspace, List(command))

    def empty: CommandData = {
      val workspace: File = new File("")
      val commands: List[String] = List[String]()
      CommandData(workspace, commands)
    }

  }

  case class MissionDirData(workspaceDir: File, resultDir: File, logFile: File)

  case class Base64Data(base64: String)

  case class ImageTypeData(imageType: String)

  case class IdData(id: String)

  case class IdOpData(id: Option[String])

  case class IdsData(ids: List[String])

  case class PositionData(chr: String, start: Int, end: Int)

  case class KindData(kind: String)

  case class KindOpData(kind: Option[String])

  case class TabOpData(tab: Option[String])

  case class ProfileData(id: String, kinds: List[String], logScale: String)

  case class ComparisonData(id: String, kindA: String, kindB: String, method: String, logScale: String)

  case class ProportionData(kind: Option[String], sample: Option[String])

  case class FileNameData(fileName: String)

  case class PageData(limit: Int, offset: Int, search: Option[String])

}
